<?php
	/** sous fonctionnalité de gestion des horaires d'entrainement d'une équipe
	 * @author Sebastian Mosser
	 */

class sfManageSchedule extends aSubFeature {

	public function __construct() {
		  $this->_acl = new AccessControlList(); 
      $this->_acl->setGranted(1, AccessControlList::$JUST_ME); // Entraineur
      $this->_acl->setGranted(2); // Recrutement
      $this->_acl->setGranted(3); // Secretariat
      $this->_acl->setGranted(7); // SysAdmin
		}
		
	public function check() {
	
		$idTeam = PropRetriever::getProp($_POST,"teamId");
		$perm = $this->_acl->isExposable(Login::getGroups());
		
		try {
			$aTeam = Team::read($idTeam);
		}
		catch(Exception $e) {
			$page = "<h1>Une erreur fatale est survenue ! </h1><br /> <br />"; 
			$page .= "<div align=\"center\"> <span class=\"error\">";
			$page .= 
					"L'équipe d'identifiant Balloon <code>[$idTeam]</code> n'éxiste pas!";
			return $page;
		}

		if ($perm == AccessControlList::$JUST_ME) {
			if (! $aTeam->canEdit(Login::getLoginId())) {
				$page = <<<EOS
<h1> Une erreur est survenue ! </h1>
<div align="center">
<p> <span class="error">Vous n'êtes pas autorisé a faire des modifications dans cette équipe car vous n'en êtes pas l'administrateur.</span></p>
</div>
<p> Si vous pensez qu'il s'agit d'une erreur, contactez le secrétariat du club qui pourra vous autoriser à y acceder.</p>
<p> Pour pouvoir modifier une équipe, vous devez être déclaré : 
<ul>
  <li> Administrateur de l'équipe </li>
  <li> Administrateur de catégorie </li>
  <li> Membre du froupe <code> Secretariat </code> </li>
  <li> Membre du groupe <code> Recrutement </code> </li>
  <li> Membre du groupe <code> Administrateur Système </code> </li>
</ul>
EOS;
				return $page;
			}
			
		}
		return True;
	
	}

	protected function run() {
		// Test d'accès		
		$test = $this->check();
		if ($test !== True)
			return $test;
			
		$idTeam    = PropRetriever::getProp($_POST,"teamId");	
		$aTeam = Team::read($idTeam);
		switch (PropRetriever::getProp($_POST,"action")) {
			case "add":
				return $this->addSchedule($aTeam);
			case "edit":
				return $this->editSchedule($aTeam);
			case "delete":
				return $this->delSchedule($aTeam);
			default:
				return ($this->displayForm($aTeam) . $this->displaySchedule($aTeam));	
		}
	}

	
	private function addSchedule($team) {
	
		// Verification des données : 
		$idTeam = PropRetriever::getProp($_POST,"teamId");
    $day    = PropRetriever::getProp($_POST,"day");
    $field  = ucwords(strtolower(PropRetriever::getProp($_POST,"field")));
    $begin  = PropRetriever::getProp($_POST,"begin");
    $end    = PropRetriever::getProp($_POST,"end");
    
    $errors = array();
    if ($field == "")
    	$errors["field"] = "Le nom de terrain ne peut pas être vide !";
    if (! Date::isValidTime($begin))
    	$errors["begin"] = "L'heure de début n'est pas au format [hh:mm]";
    if (! Date::isValidTime($end))
    	$errors["end"] = "L'heure de fin n'est pas au format [hh:mm]";
    
    if (count($errors) != 0) {
    	return $this->displayForm($team,$errors).$this->displaySchedule($team);
    }
    	
    $team->addSchedule($day,$field,$begin,$end);
    $team->update();
    $result = $this->displayForm($team);
    $result .= <<<EOS
<div align="center">
<br />
<p><span class="error"> Ajout effectué avec succès </span> </p>
</div>
EOS;
    $result .= $this->displaySchedule($team);
    return $result;
	}
	
	private function editSchedule($team) {
		$idTeam     = PropRetriever::getProp($_POST,"teamId");
    $day        = PropRetriever::getProp($_POST,"day");
    $field      = ucwords(strtolower(PropRetriever::getProp($_POST,"field")));
    $begin      = PropRetriever::getProp($_POST,"begin");
    $end        = PropRetriever::getProp($_POST,"end");
    $scheduleId = PropRetriever::getProp($_POST,"scheduleId");
    
    $errors = array();
    if ($field == "")
    	$errors["field"] = "Le nom de terrain ne peut pas être vide !";
    if (! Date::isValidTime($begin))
    	$errors["begin"] = "L'heure de début n'est pas au format [hh:mm]";
    if (! Date::isValidTime($end))
    	$errors["end"] = "L'heure de fin n'est pas au format [hh:mm]";
    
    if (count($errors) != 0) {
    	return $this->displayForm($team,$errors).$this->displaySchedule($team);
    }
    	
    $team->addSchedule($day,$field,$begin,$end,$scheduleId);
    $team->update();
    $_POST["day"] = ""; $_POST["field"] = "";
    $_POST["begin"] = ""; $_POST["end"] = "";
    
    $result = $this->displayForm($team);
    $result .= <<<EOS
<div align="center">
<br />
<p><span class="error"> Modification effectuée avec succès </span> </p>
</div>
EOS;
    $result .= $this->displaySchedule($team);
    return $result;
	}
	
	private function delSchedule($team) {
	$scheduleId = PropRetriever::getProp($_POST,"scheduleId");
	$team->delSchedule($scheduleId);
	$team->update();
	$result = $this->displayForm($team);
    $result .= <<<EOS
<div align="center">
<br />
<p><span class="error"> Suppression effectuée avec succès </span> </p>
</div>
EOS;
    $result .= $this->displaySchedule($team);
    return $result;
	
	}

	private function displayForm($aTeam, $errors = array()) {
		$idTeam = PropRetriever::getProp($_POST,"teamId");
    $day    = PropRetriever::getProp($_POST,"day");
    $field  = ucwords(strtolower(PropRetriever::getProp($_POST,"field")));
    $begin  = PropRetriever::getProp($_POST,"begin");
    $end    = PropRetriever::getProp($_POST,"end");
    
    
    $style = array();
    $style["field"] = ""; $style["begin"] = ""; $style["end"] = "";
    
    $errorsText = "";
    foreach($errors as $k => $v) {
    	$style[$k] = "class=\"error\"";
    	$errorsText .= "<li> <span class=\"error\"> $v </span></li>";
    }
    
    if ($errorsText != "") {
    	$errorsText =  "<h2> Erreurs lors du traitement des données</h2><ul>".$errorsText."</ul>";
    }
    
    $dayOptions = Date::getDaysAsOption($day);
    
		$page = "";
		$teamName = $aTeam->displayShort();

		$page = 
				"<h1> Gestion des horaires d'entrainements de l'équipe $teamName </h1>";
		$page .= fManageTeams::getReturnButton($idTeam);
		
		$page  .= <<<EOS
<h1> Ajouter un entrainement </h1>

<div align="center">
<table>

<form method="post">
	<input type="hidden" name="teamId" value="${idTeam}" />
	<input type="hidden" name="action" value="add" /> 
<tr>
<td>	
	<fieldset>
		<legend> Localisation </legend>
		<br />

		<label> 
			<span> Jour : </span>
			<select name="day" class="edit" />
			${dayOptions}
			</select>
			&nbsp; &nbsp;
		</label>
		<br />

		<label> 
			<span ${style["field"]}> Terrain : </span>
			<input type="text" name="field" value="${field}" class="edit"/>
			&nbsp; &nbsp;
		</label>
		<br />			
		<br />
	</fieldset>
</td>
<td>
	&nbsp; &nbsp; &nbsp; 
</td>
<td>
	<fieldset>
		<legend> Horaires <em>(hh:mm)</em></legend>
		<br />
		<label> 
			<span ${style["begin"]}> Début  : </span>
			<input type="text" name="begin" value="${begin}" class="edit" />
			&nbsp; &nbsp;
		</label>
		<br />	
		
		<label> 
			<span ${style["end"]}> Fin : </span>
			<input type="text" name="end" value="${end}" class="edit" />
			&nbsp; &nbsp;
		</label>
		<br /> <br />
	</fieldset>
</td>
</tr>
<tr>
<td colspan="3" align="center"> 
	<br />
	<input type="submit" value="Ajouter l'entrainement" class="edit" /> 
</td>
</tr>
</form>
</table>
</div>
${errorsText}
EOS;
		return $page;
	}
	
	private function displaySchedule($aTeam) {

		$idTeam    = PropRetriever::getProp($_POST,"teamId");		
		$aTeam = Team::read($idTeam);
		$page = "<h1> Horaires d'entrainements de l'équipe </h1>";
		
		$schedules = $aTeam->getSchedules();
		if (count($schedules) == 0) {
			$page .= <<<EOS
<div align="center">
  <p>
    <span class="error"> 
      Aucun horaire définit actuellement pour l'équipe ! 
		</span> 
	</p>
</div> 
EOS;
		}
		else {
			$header  = " <div align=\"center\"><table class=\"resultset\">";
			$header .= " <tr> <th> Jour </th> <th> Terrain </th> ";
			$header .= " <th> Heure de Début </th> <th> Heure de fin </th> ";
			$header .= " <th colspan=\"2\"> Actions Disponibles </th> </tr>";
			
			$footer = "</table> </div>";
			
			$content = "";
			foreach($schedules as $k => $v) {
				
				$days = Date::getDaysAsOption($v["day"]);
				
				$content .= <<<EOS
<tr>  
  <!-- formulaire de modification -->
	<form method="post" action="#${k}">
		<input type="hidden" name="teamId"     value="${idTeam}" />
		<input type="hidden" name="scheduleId" value="${k}"      />
		<input type="hidden" name="action"     value="edit"      />
		<td id="${k}">
			<select name="day" class="edit"> ${days} </select>
		</td>
		<td>
			<input type="text" name="field" class=edit value="${v["field"]}" />
		</td>
		<td>
			<input type="text" name="begin" class=edit value="${v["begin"]}" />
		</td>
		<td>
			<input type="text" name="end" class=edit value="${v["end"]}" />
		</td>
		<td>
			<input class="edit" type="submit" value="Modifier" />
		</td>
	</form>
		
	<!-- Formulaire de suppression -->
	<form method="post">
		<input type="hidden" name="teamId"   value="${idTeam}" />
		<input type="hidden" name="scheduleId" value="${k}"      />
		<input type="hidden" name="action"   value="delete"    />
		<td>
			<input class="edit" type="submit" value="Supprimer"  />
		</td>
	</form>
</tr>
EOS;
			}
			$page .= $header . $content . $footer;
		}
			
		return $page;
	}
	
}

?>